home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / masm.arc / CV.ASM < prev    next >
Assembly Source File  |  1985-03-06  |  2KB  |  117 lines

  1. PAGE    ,132    
  2. NAME    CV
  3. TITLE    Change/create volume name
  4.  
  5. COMMENT *    Syntax: CV [d:]volname
  6.                     (no blanks between [d:] and
  7.                      first character of volname;
  8.                      volname itself may contain
  9.                      blanks)
  10.  
  11.         Changes directory of drive specified to root; if a volume 
  12.     entry exists, it is renamed 'volname'; otherwise a volume entry 
  13.     with that name is created in the root directory. 
  14.             - 16 Sept. 1983, Thomas G. Roberts -
  15.     * 
  16. CODE    SEGMENT
  17.     ORG 100H
  18.     ASSUME CS:CODE,DS:CODE,ES:CODE
  19. CVOL    PROC    FAR
  20.     JMP START
  21.  
  22. ;--------    Data area    --------
  23.  
  24. FCB    DB    0FFH
  25.     DB    5 DUP(0)
  26. ATTR    DB    8
  27. DRV    DB    0
  28. VNAME    DB    11 DUP('?')
  29.     DB    5 DUP(?)
  30. NEW    DB    20 DUP(?)
  31. CDSTR    DB    ?,':\',0
  32. ERMSG    DB    'Incorrect DOS version.$'
  33. DUMMY    DB    ?,':XYZZY',0
  34. M2    DB    'CV: Cannot create volume entry' 
  35. LM2    EQU    $ - M2
  36.  
  37. ;----------------------------- 
  38.  
  39. START:    MOV AH,30H
  40.     INT 21H        ;get vers.#
  41.     CMP AL,2
  42.     JNB OK
  43.     MOV DX,OFFSET ERMSG
  44.     MOV AH,9
  45.     INT 21H
  46.     INT 20H
  47.  
  48. OK:    MOV SI,82H
  49.     SUB CX,CX
  50.     MOV CL,[SI-2]
  51.     CMP CL,2
  52.     JB EXIT        ;no parms
  53.     DEC CX        ;separator at 81H
  54.     MOV DI,SI
  55. LSPC:    MOV AL,[SI]
  56.     CMP AL,20H    ;scan leading blanks
  57.     JNZ NXT
  58.     INC SI
  59.     LOOP LSPC
  60.     JMP EXIT    ;all blanks ??
  61. NXT:
  62. REP    MOVSB
  63.     MOV BX,5CH
  64.     MOV AL,[BX]    ;get drive byte
  65.     CMP AL,0
  66.     JNZ SKP
  67.     MOV AH,19H    ;get deflt driv #
  68.     INT 21H
  69.     INC AL
  70. SKP:    MOV DRV,AL
  71.     OR AL,40H    ;make drive letter
  72.     MOV CDSTR,AL
  73.     MOV DUMMY,AL    ;in case no vol.exists
  74.     MOV DX,OFFSET CDSTR
  75.     MOV AX,3B00H
  76.     INT 21H        ;cd drv:\
  77.     MOV DX,OFFSET FCB
  78.     MOV AH,1AH
  79.     INT 21H        ;set DTA
  80. BACK:    MOV AH,11H
  81.     INT 21H        ;get vol.name
  82.     CMP AL,0FFH    ;none
  83.     JNE GO            
  84.     MOV DX,OFFSET DUMMY
  85.     MOV CX,8    ;vol.attr.
  86.     MOV AH,3CH    ;create
  87.     INT 21H        ;dummy vol.
  88.     CMP AX,2    ;this is returned with CY (?)
  89.     JNE ERR        ;cant create
  90.     MOV DX,OFFSET FCB
  91.     JMP BACK
  92. GO:    MOV CX,90H
  93.     SUB CX,DI
  94.     MOV AL,20H
  95. REP    STOSB        ;pad w/blanks
  96.     MOV CX,11
  97.     MOV SI,82H
  98.     MOV AL,[BX]    ;drive byte again
  99.     CMP AL,0    ;is drive @ 82H?    
  100.     JZ DFLT
  101.     INC SI        
  102.     INC SI
  103. DFLT:    MOV DI,OFFSET NEW
  104. REP    MOVSB        ;setup
  105.     MOV AH,17H    ;rename
  106.     INT 21H        ;could do msg/errorlevel if CF=1
  107. EXIT:    INT 20H         
  108. ERR:    MOV BX,2    ;std err
  109.     MOV CX,LM2 
  110.     MOV DX,OFFSET M2 
  111.     MOV AH,40H
  112.     INT 21H
  113.     INT 20H
  114. CVOL    ENDP
  115. CODE    ENDS
  116.     END CVOL
  117.